package com.hxkj.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hxkj.dao.ArticleDao;
import com.hxkj.dao.ArticleTagsDao;
import com.hxkj.dao.ColumnDao;
import com.hxkj.dao.TagsDao;
import com.hxkj.domain.po.*;
import com.hxkj.service.ColumnArticleService;
import com.platform.common.dispatcher.util.ResultStructUtils;
import com.platform.common.domain.result.ResultPageStruct;
import com.platform.common.domain.to.PageTo;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.jdbc.Null;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName ColumnArticleServiceImpl
 * @Description TODO
 * @Author Mr.zheng
 * @Date 2018/7/2 15:26
 * @Version 1.0
 */
@Service
@Slf4j
public class ColumnArticleServiceImpl implements ColumnArticleService{

    @Autowired
    private ColumnDao columnDao;

    @Autowired
    private ArticleDao articleDao;

    @Autowired
    private ArticleTagsDao articleTagsDao;

    @Autowired
    private TagsDao tagsDao;

    @Override
    public ColumnArticleTree getColumnArticle(Column column, PageTo pageTo) throws Exception{
        ColumnArticleTree columnArticleTree = new ColumnArticleTree();
        try {
            //Mr.zheng:递归调用获取文章分类的树结构
            List<Column> columnList = columnDao.getOptionColumnList(column);
            //Mr.zheng:根据分类ID查出分类，将其分装后递归调用封装
            for (Column auf: columnList) {
                columnArticleTree.setColumnName(auf.getColumnName() == null ? "" : auf.getColumnName());
                columnArticleTree.setColumnId(auf.getColumnId());
                columnArticleTree.setParentColumnId(auf.getParentColumnId());
                columnArticleTree.setSortNumber(auf.getSortNumber());
                columnArticleTree.setComment(auf.getComment()==null ? "" : auf.getComment());
                columnArticleTree.setFileName1(auf.getFileName1()==null ? "" : auf.getFileName1());
                columnArticleTree.setImgUrl(auf.getImgUrl()==null ? "" : auf.getImgUrl());
                columnArticleTree.setTempletName1(auf.getTempletName1()==null ? "" : auf.getTempletName1());
                columnArticleTree.setPath1(auf.getPath1()==null ? "" : auf.getPath1());
                columnArticleTree.setFileName2(auf.getFileName2()==null ? "" : auf.getFileName2());
                columnArticleTree.setTempletName2(auf.getTempletName2()==null ? "" : auf.getTempletName2());
                columnArticleTree.setPath2(auf.getPath2()==null ? "" : auf.getPath2());
                columnArticleTree.setSiteId(auf.getSiteId());
                columnArticleTree.setCreateTime(auf.getCreateTime());
                columnArticleTree.setUpdateTime(auf.getUpdateTime());
                columnArticleTree.setTempletId(auf.getTempletId());
                columnArticleTree.setTempId(auf.getTempId());
                columnArticleTree.setColumnStatus(auf.getColumnStatus());
                columnArticleTree.setSeoDepict(auf.getSeoDepict());
                columnArticleTree.setSeoHeadline(auf.getSeoHeadline());
                columnArticleTree.setSeoKeyword(auf.getSeoKeyword());
                columnArticleTree.setManuscriptPath(auf.getManuscriptPath());
                columnArticleTree.setColumnType(auf.getColumnType());
                columnArticleTree.setPageNum(auf.getPageNum());
                columnArticleTree.setPageSize(auf.getPageSize());
                columnArticleTree.setChildren(initGetColumnArticleTree(auf.getColumnId(), auf,pageTo));
            }

        } catch (Exception e) {
            e.printStackTrace();
            log.info("获取文章分类树及分类下的文章列表失败");
        }
        return columnArticleTree;
    }

    @Override
    public PageInfo<Article> getTagsArticle(Tags tags, PageTo pageTo) {

        try {
            List<Tags> tagsList = tagsDao.getTagslist(tags);

            if (tagsList.size()!=0){
                ArticleTags articleTags = new ArticleTags();
                articleTags.setTagsId(tagsList.get(0).getTagsId());
                Page<Article> page = PageHelper.startPage(pageTo.getPageNum(), pageTo.getPageSize());
                List<Article> articleList;
                articleList = articleTagsDao.getTagsArticle(articleTags);
                PageInfo<Article> pageInfo = new PageInfo<>(page);
                pageInfo.setList(articleList);
                return pageInfo;
            }

        } catch (Exception e) {
            e.printStackTrace();
            log.info("获取文章分类树及分类下的文章列表失败");
        }
        return null;
    }

    private List<ColumnArticleTree> initGetColumnArticleTree(long id, Column col, PageTo pageTo) throws Exception{
        List<ColumnArticleTree> columnArticleTreeList = new ArrayList<>();
        Column column = new Column();
        column.setParentColumnId(id);
        column.setSiteId(col.getSiteId());
        List<Column> columnList = columnDao.getOptionColumnList(column);
        if (columnList != null && columnList.size() != 0) {
            for (Column auf : columnList) {
                ColumnArticleTree columnArticleTree = new ColumnArticleTree();
                columnArticleTree.setColumnName(auf.getColumnName() == null ? "" : auf.getColumnName());
                columnArticleTree.setColumnId(auf.getColumnId());
                columnArticleTree.setParentColumnId(auf.getParentColumnId());
                columnArticleTree.setSortNumber(auf.getSortNumber());
                columnArticleTree.setComment(auf.getComment()==null ? "" : auf.getComment());
                columnArticleTree.setFileName1(auf.getFileName1()==null ? "" : auf.getFileName1());
                columnArticleTree.setImgUrl(auf.getImgUrl()==null ? "" : auf.getImgUrl());
                columnArticleTree.setTempletName1(auf.getTempletName1()==null ? "" : auf.getTempletName1());
                columnArticleTree.setPath1(auf.getPath1()==null ? "" : auf.getPath1());
                columnArticleTree.setFileName2(auf.getFileName2()==null ? "" : auf.getFileName2());
                columnArticleTree.setTempletName2(auf.getTempletName2()==null ? "" : auf.getTempletName2());
                columnArticleTree.setPath2(auf.getPath2()==null ? "" : auf.getPath2());
                columnArticleTree.setSiteId(auf.getSiteId());
                columnArticleTree.setCreateTime(auf.getCreateTime());
                columnArticleTree.setUpdateTime(auf.getUpdateTime());
                columnArticleTree.setTempletId(auf.getTempletId());
                columnArticleTree.setTempId(auf.getTempId());
                columnArticleTree.setColumnStatus(auf.getColumnStatus());
                columnArticleTree.setColumnType(auf.getColumnType());
                columnArticleTree.setPageNum(auf.getPageNum());
                columnArticleTree.setPageSize(auf.getPageSize());

                Article article = new Article();
                article.setColumnId(auf.getColumnId());
                article.setSiteId(auf.getSiteId());
                Page<Article> page = PageHelper.startPage(pageTo.getPageNum(), pageTo.getPageSize());
                List<Article> articleList = articleDao.getOptionArticleList(article);
                if (articleList.size()!=0 || null!=articleList) {
                    ResultPageStruct<Article> resultPageStruct;
                    PageInfo<Article> pageInfo = new PageInfo<>(page);
                    pageInfo.setList(articleList);
                    resultPageStruct = ResultStructUtils.buildResultPageStruct(pageInfo);
                    resultPageStruct.setCode(null);
                    resultPageStruct.setMessage(null);

                    columnArticleTree.setArticleList(resultPageStruct);
                }
                //Mr.zheng:递归调用
                columnArticleTree.setChildren(initGetColumnArticleTree(auf.getColumnId(), auf,pageTo));
                columnArticleTreeList.add(columnArticleTree);
            }
        }
        return columnArticleTreeList;
    }
}
